package pe.gob.pj.sri.web.action.coordesa;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;
import org.richfaces.component.html.HtmlDataTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.gob.pj.sri.bean.Ticket;
import pe.gob.pj.sri.bean.Ticket_Usuario;
import pe.gob.pj.sri.bean.Usuario;
import pe.gob.pj.sri.servicio.TicketService;
import pe.gob.pj.sri.servicio.Ticket_UsuarioService;
import pe.gob.pj.sri.servicio.UsuarioService;
import pe.gob.pj.sri.web.util.Constantes;

@Scope("session")
@Controller("registroTicketAction")
public class RegistroTicketAction {
	@Autowired
	private static final Logger LOGGER = Logger.getLogger(RegistroTicketAction.class);
	@Autowired
	private Ticket ticket;
	@Autowired
	private Usuario analista;
	@Autowired
	private UsuarioService usuario_service;
	@Autowired
	private Ticket_UsuarioService ticket_usuario_service;
	@Autowired
	private TicketService ticket_service;
	
	private Usuario dataItem;
	private List<Usuario> lista_analistas;
	private HtmlDataTable radioDataTableAnalistas;
	private List<Usuario> lista_analistas_seleccionados;

	public String registrar(){
		// HACER LA COMPROBACION CON UN MENSAJE
		
		registrarTicket();
		asignarTicket();
		
		return "correcto";
	}
	
	public void asignarTicket(){
		// JOAN HACER
		//Ticket ticket= this.ticket_action;
		boolean cambioEstadoTicket=false;
		for(int i=0; i<this.lista_analistas_seleccionados.size(); i++){
			//System.out.println(this.lista_analistas_seleccionados.get(i).getApellidoMaterno());
			Ticket_Usuario ticket_usuario=new Ticket_Usuario();
			ticket_usuario.setIdTicket(ticket.getIdTicket());
			ticket_usuario.setIdUsuario(this.lista_analistas_seleccionados.get(i).getIdUsuario());
			if(ticket_usuario_service.registrarTicket_Usuario(ticket_usuario))
				System.out.println("Registrado Usuario: "+this.lista_analistas_seleccionados.get(i).getIdUsuario()+" a Ticket: "+ticket.getIdTicket());
			if(!cambioEstadoTicket)
			{
				cambioEstadoTicket=true;
				ticket.setEstado(20);
				if(ticket_service.modificarTicket(ticket))
					System.out.println("Actualizo correctamente el ticket");
			}
			
		}
	}
	
	public void registrarTicket(){
		System.out.println("Registrar Ticket");
		
		if(ticket_service.registrarTicket(ticket))
			System.out.println("Mostrando mensaje de confirmacion de TicketRegistrado");
		// registrar ticket en la base de datos
	}
	public void establecerElementoSeleccionado(){
		try{
			System.out.print("establecerElementoSeleccionado: ");
			dataItem = null;
			
			dataItem = (Usuario)radioDataTableAnalistas.getRowData();
			
			int i=0;
			if((i=this.lista_analistas_seleccionados.indexOf(dataItem))!=-1){
				this.lista_analistas_seleccionados.remove(i);
				System.out.println(dataItem.getApellidoPaterno()+" existe, se quita de la lista");
			}else{
				this.lista_analistas_seleccionados.add(dataItem);
				System.out.println(dataItem.getApellidoPaterno()+", se agregó");
			}
		}catch(Exception e){
			LOGGER.error("Error =>");
		}
	}
	
	
	public String getRecuperar_usuarios(){
		try {
			lista_analistas.clear();
			lista_analistas = usuario_service.listarAanalistas("car3");
			
		} catch (Exception e) {
			System.out.println("Error");
			e.printStackTrace();
		}
		
		return "";
	}
	
	// constructor
	public RegistroTicketAction() {
		this.lista_analistas = new ArrayList<Usuario>();
		this.lista_analistas_seleccionados = new ArrayList<Usuario>();
	}
	
	// getters and setters

	public Usuario getAnalista() {
		return analista;
	}

	public void setAnalista(Usuario analista) {
		this.analista = analista;
	}

	public List<Usuario> getLista_analistas() {
		return lista_analistas;
	}

	public void setLista_analistas(List<Usuario> lista_analistas) {
		this.lista_analistas = lista_analistas;
	}

	public HtmlDataTable getRadioDataTableAnalistas() {
		return radioDataTableAnalistas;
	}

	public void setRadioDataTableAnalistas(HtmlDataTable radioDataTableAnalistas) {
		this.radioDataTableAnalistas = radioDataTableAnalistas;
	}

	public List<Usuario> getLista_analistas_seleccionados() {
		return lista_analistas_seleccionados;
	}

	public void setLista_analistas_seleccionados(
			List<Usuario> lista_analistas_seleccionados) {
		this.lista_analistas_seleccionados = lista_analistas_seleccionados;
	}

	public static Logger getLogger() {
		return LOGGER;
	}

	public Ticket getTicket() {
		return ticket;
	}

	public void setTicket(Ticket ticket) {
		this.ticket = ticket;
	}

}
